import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

/// Loading 工具类
/// 
/// 基于 flutter_easyloading 的二次封装
/// 统一风格：黑底半透明 + 白色文字
/// 
/// 🎯 核心方法：
/// - show()      显示 Loading（需手动关闭）
/// - success()   显示成功提示（自动关闭）
/// - error()     显示错误提示（自动关闭）
/// - info()      显示信息提示（自动关闭）
/// - toast()     显示轻提示（自动关闭，显示在中间）
/// - progress()  显示进度条（需手动关闭）
/// - dismiss()   关闭所有提示
/// - execute()   自动处理 Loading
class LoadingUtil {
  LoadingUtil._();
  
  /// 🎨 初始化 EasyLoading 配置（黑底半透明风格）
  /// 
  /// ⚠️ 需要在 main() 函数中调用一次
  static void init() {
    EasyLoading.instance
      ..displayDuration = const Duration(milliseconds: 1000)  // 显示时长
      ..indicatorType = EasyLoadingIndicatorType.fadingCircle // Loading 动画类型
      ..loadingStyle = EasyLoadingStyle.custom                // 自定义样式
      ..indicatorSize = 45.0                                  // 指示器大小
      ..radius = 12.0                                         // 圆角半径
      ..progressColor = Colors.white                          // 🎨 进度条颜色（白色）
      ..backgroundColor = Colors.black.withOpacity(0.7)       // 🎨 黑底半透明背景
      ..indicatorColor = Colors.white                         // 🎨 指示器颜色（白色）
      ..textColor = Colors.white                              // 🎨 文字颜色（白色）
      ..maskColor = Colors.black.withOpacity(0.5)             // 遮罩颜色
      ..userInteractions = false                              // 禁止用户交互
      ..dismissOnTap = false                                  // 点击不消失
      ..fontSize = 14.0                                       // 字体大小
      ..lineWidth = 2.0                                       // 线条宽度
      ..maskType = EasyLoadingMaskType.custom                 // 遮罩类型
      ..toastPosition = EasyLoadingToastPosition.center       // 🎨 Toast 位置（中间）
      ..animationStyle = EasyLoadingAnimationStyle.scale;     // 动画样式
  }
  
  /// 显示 Loading（需手动关闭）
  /// 
  /// [status] 提示文字，默认 "加载中..."
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.show('提交中...');
  /// await apiService.submit();
  /// LoadingUtil.dismiss();
  /// ```
  static void show([String status = '加载中...']) {
    EasyLoading.show(status: status);
  }
  
  /// 显示成功提示（自动关闭）
  /// 
  /// [message] 提示文字
  /// [duration] 显示时长，默认 1 秒
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.success('操作成功');
  /// ```
  static void success(String message, {Duration? duration}) {
    EasyLoading.showSuccess(
      message,
      duration: duration ?? const Duration(milliseconds: 1000),
    );
  }
  
  /// 显示错误提示（自动关闭）
  /// 
  /// [message] 提示文字
  /// [duration] 显示时长，默认 2 秒
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.error('操作失败，请重试');
  /// ```
  static void error(String message, {Duration? duration}) {
    EasyLoading.showError(
      message,
      duration: duration ?? const Duration(milliseconds: 2000),
    );
  }
  
  /// 显示信息提示（自动关闭）
  /// 
  /// [message] 提示文字
  /// [duration] 显示时长，默认 1 秒
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.info('请先选择开始时间');
  /// ```
  static void info(String message, {Duration? duration}) {
    EasyLoading.showInfo(
      message,
      duration: duration ?? const Duration(milliseconds: 1000),
    );
  }
  
  /// 显示轻提示（自动关闭，显示在中间）
  /// 
  /// [message] 提示文字
  /// [duration] 显示时长，默认 1 秒
  /// [position] 显示位置，默认中间
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.toast('图片已删除');
  /// 
  /// // 自定义位置
  /// LoadingUtil.toast('操作成功', position: EasyLoadingToastPosition.top);
  /// ```
  static void toast(
    String message, {
    Duration? duration,
    EasyLoadingToastPosition? position,
  }) {
    EasyLoading.showToast(
      message,
      duration: duration ?? const Duration(milliseconds: 1000),
      toastPosition: position ?? EasyLoadingToastPosition.center,
    );
  }
  
  /// 显示进度条（需手动关闭）
  /// 
  /// [progress] 进度值 0.0 - 1.0
  /// [status] 提示文字
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.progress(0.5, status: '上传中... 50%');
  /// // ... 更新进度
  /// LoadingUtil.dismiss();
  /// ```
  static void progress(double progress, {String? status}) {
    EasyLoading.showProgress(
      progress,
      status: status,
    );
  }
  
  /// 关闭所有提示
  /// 
  /// 示例：
  /// ```dart
  /// LoadingUtil.dismiss();
  /// ```
  static void dismiss() {
    EasyLoading.dismiss();
  }
  
  /// 🔥 自动处理 Loading（推荐）
  /// 
  /// [future] 要执行的异步操作
  /// [loadingText] Loading 提示文字
  /// [successText] 成功提示文字（可选）
  /// [showSuccess] 是否显示成功提示，默认 true
  /// 
  /// 返回：操作是否成功
  /// 
  /// 示例：
  /// ```dart
  /// final success = await LoadingUtil.execute(
  ///   future: () => apiService.submit(),
  ///   loadingText: '提交中...',
  ///   successText: '提交成功',
  /// );
  /// 
  /// if (success) {
  ///   Get.back();
  /// }
  /// ```
  static Future<bool> execute<T>({
    required Future<T> Function() future,
    String loadingText = '加载中...',
    String? successText,
    bool showSuccess = true,
  }) async {
    try {
      show(loadingText);
      await future();
      dismiss();
      
      if (showSuccess && successText != null) {
        success(successText);
      }
      
      return true;
    } catch (e) {
      dismiss();
      error('操作失败: ${e.toString()}');
      return false;
    }
  }
  
  /// 是否正在显示
  static bool get isShow => EasyLoading.isShow;
}

